package org.example.service;

import org.example.dto.CreateShortUrlRequest;
import org.example.dto.CreateShortUrlResponse;
import org.example.entity.ShortUrl;

import java.util.List;

/**
 * 短链接服务接口
 * 
 * @author Your Name
 * @since 2024-07-01
 */
public interface ShortUrlService {
    
    /**
     * 创建短链接
     * 
     * @param request 创建请求
     * @return 创建响应
     */
    CreateShortUrlResponse createShortUrl(CreateShortUrlRequest request);
    
    /**
     * 根据短链接编码获取原始链接
     * 
     * @param shortCode 短链接编码
     * @return 原始链接
     */
    String getOriginalUrl(String shortCode);
    
    /**
     * 重定向到原始链接
     * 
     * @param shortCode 短链接编码
     * @param ipAddress 访问者IP
     * @param userAgent 用户代理
     * @param referer 来源页面
     * @return 原始链接
     */
    String redirectToOriginalUrl(String shortCode, String ipAddress, String userAgent, String referer);
    
    /**
     * 获取短链接信息
     * 
     * @param shortCode 短链接编码
     * @return 短链接实体
     */
    ShortUrl getShortUrlInfo(String shortCode);
    
    /**
     * 获取所有短链接
     * 
     * @return 短链接列表
     */
    List<ShortUrl> getAllShortUrls();
    
    /**
     * 分页获取短链接
     * 
     * @param page 页码（从1开始）
     * @param size 每页大小
     * @return 短链接列表
     */
    List<ShortUrl> getShortUrlsByPage(int page, int size);
    
    /**
     * 更新短链接状态
     * 
     * @param shortCode 短链接编码
     * @param status 状态
     * @return 是否成功
     */
    boolean updateShortUrlStatus(String shortCode, Integer status);
    
    /**
     * 删除短链接
     * 
     * @param shortCode 短链接编码
     * @return 是否成功
     */
    boolean deleteShortUrl(String shortCode);
    
    /**
     * 获取短链接访问统计
     * 
     * @param shortCode 短链接编码
     * @return 访问次数
     */
    Long getAccessCount(String shortCode);
}
